package com.bj58.mis.apm.server.core.util;

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;

/**
 * @Author: wangxw
 * @Date: 2018/7/27 17:45
 */
public class UnitUtil {
    private static List<String> units = Arrays.asList("B", "KB", "MB", "GB", "TB", "PB");

    public static UnitValue deal(Number number){
        for(int len = units.size() - 1; len > 0 ; len --){
            if(number.doubleValue() > Math.pow(1024, len)){
                return new UnitValue(units.get(len), getValue(number.doubleValue(), Math.pow(1024, len)));
            }
        }
        return new UnitValue(units.get(0), number.doubleValue());
    }

    public static UnitValue deal(Number number, String unit){
        int i = units.indexOf(unit);
        if(i > 0){
            return new UnitValue(units.get(i), getValue(number.doubleValue(), Math.pow(1024, i)));
        }else{
            return new UnitValue(units.get(0), number.doubleValue());
        }
    }

    public static Double dealByUnit(Number number, String unit){
        int i = units.indexOf(unit);
        if(i > 0){
            return getValue(number.doubleValue(), Math.pow(1024, i));
        }else{
            return number.doubleValue();
        }
    }

    private static Double getValue(Double dou, Double divide){
        return new BigDecimal(dou).divide(new BigDecimal(divide), 2, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
}
